using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._UtilityNetworkTools
{
    /// <summary>
    /// <para>Reshape Diagram Edges Layout</para>
    /// <para>Apply the reshape diagram edges layout to a diagram</para>
    /// <para>将调整逻辑示意图边布局应用于逻辑示意图</para>
    /// </summary>    
    [DisplayName("Reshape Diagram Edges Layout")]
    public class ReshapeDiagramEdgesLayout : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ReshapeDiagramEdgesLayout()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_network_diagram_layer">
        /// <para>Input Network Diagram Layer</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        public ReshapeDiagramEdgesLayout(object _in_network_diagram_layer)
        {
            this._in_network_diagram_layer = _in_network_diagram_layer;
        }
        public override string ToolboxName => "Utility Network Tools";

        public override string ToolName => "Reshape Diagram Edges Layout";

        public override string CallName => "un.ReshapeDiagramEdgesLayout";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_network_diagram_layer, _are_containers_preserved.GetGPValue(), _reshape_type.GetGPValue(), _is_path_preserved.GetGPValue(), _offset_between_segment_absolute, _breakpoint_absolute, _shift_between_edge_absolute, _angle_threshold, _out_network_diagram_layer, _circular_arc_radius, _circular_arc_position.GetGPValue(), _run_async.GetGPValue()];

        /// <summary>
        /// <para>Input Network Diagram Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network Diagram Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_network_diagram_layer { get; set; }


        /// <summary>
        /// <para>Preserve container layout</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserve container layout")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _are_containers_preserved_value _are_containers_preserved { get; set; } = _are_containers_preserved_value._false;

        public enum _are_containers_preserved_value
        {
            /// <summary>
            /// <para>PRESERVE_CONTAINERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PRESERVE_CONTAINERS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>IGNORE_CONTAINERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_CONTAINERS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Reshape Operation</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reshape Operation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _reshape_type_value _reshape_type { get; set; } = _reshape_type_value._SQUARE_EDGES;

        public enum _reshape_type_value
        {
            /// <summary>
            /// <para>REMOVE_VERTICES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REMOVE_VERTICES")]
            [GPEnumValue("REMOVE_VERTICES")]
            _REMOVE_VERTICES,

            /// <summary>
            /// <para>SQUARE_EDGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SQUARE_EDGES")]
            [GPEnumValue("SQUARE_EDGES")]
            _SQUARE_EDGES,

            /// <summary>
            /// <para>SEPARATE_OVERLAPPING_EDGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SEPARATE_OVERLAPPING_EDGES")]
            [GPEnumValue("SEPARATE_OVERLAPPING_EDGES")]
            _SEPARATE_OVERLAPPING_EDGES,

            /// <summary>
            /// <para>REDUCE_VERTICES_BY_ANGLE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REDUCE_VERTICES_BY_ANGLE")]
            [GPEnumValue("REDUCE_VERTICES_BY_ANGLE")]
            _REDUCE_VERTICES_BY_ANGLE,

            /// <summary>
            /// <para>MARK_CROSSING_EDGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MARK_CROSSING_EDGES")]
            [GPEnumValue("MARK_CROSSING_EDGES")]
            _MARK_CROSSING_EDGES,

        }

        /// <summary>
        /// <para>Preserve path</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserve path")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_path_preserved_value _is_path_preserved { get; set; } = _is_path_preserved_value._true;

        public enum _is_path_preserved_value
        {
            /// <summary>
            /// <para>PRESERVE_PATH</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PRESERVE_PATH")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>IGNORE_PATH</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_PATH")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Offset Between Edges</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Offset Between Edges")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _offset_between_segment_absolute { get; set; } = "5 Unknown";


        /// <summary>
        /// <para>Break Point Position</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Break Point Position")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _breakpoint_absolute { get; set; } = "8.66 Unknown";


        /// <summary>
        /// <para>Offset Between Edges</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Offset Between Edges")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _shift_between_edge_absolute { get; set; } = "0.5 Unknown";


        /// <summary>
        /// <para>Angle Threshold</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Angle Threshold")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _angle_threshold { get; set; } = 0;


        /// <summary>
        /// <para>Output Network Diagram</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network Diagram")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_network_diagram_layer { get; set; }


        /// <summary>
        /// <para>Circular Arc Radius</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Circular Arc Radius")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _circular_arc_radius { get; set; } = "5 Unknown";


        /// <summary>
        /// <para>Circular Arc Position</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Circular Arc Position")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _circular_arc_position_value _circular_arc_position { get; set; } = _circular_arc_position_value._RIGHT_OF_VERTICAL_SEGMENT;

        public enum _circular_arc_position_value
        {
            /// <summary>
            /// <para>LEFT_OF_VERTICAL_SEGMENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("LEFT_OF_VERTICAL_SEGMENT")]
            [GPEnumValue("LEFT_OF_VERTICAL_SEGMENT")]
            _LEFT_OF_VERTICAL_SEGMENT,

            /// <summary>
            /// <para>RIGHT_OF_VERTICAL_SEGMENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RIGHT_OF_VERTICAL_SEGMENT")]
            [GPEnumValue("RIGHT_OF_VERTICAL_SEGMENT")]
            _RIGHT_OF_VERTICAL_SEGMENT,

            /// <summary>
            /// <para>ABOVE_HORIZONTAL_SEGMENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ABOVE_HORIZONTAL_SEGMENT")]
            [GPEnumValue("ABOVE_HORIZONTAL_SEGMENT")]
            _ABOVE_HORIZONTAL_SEGMENT,

            /// <summary>
            /// <para>BELOW_HORIZONTAL_SEGMENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BELOW_HORIZONTAL_SEGMENT")]
            [GPEnumValue("BELOW_HORIZONTAL_SEGMENT")]
            _BELOW_HORIZONTAL_SEGMENT,

        }

        /// <summary>
        /// <para>Run in asynchronous mode on the server</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Run in asynchronous mode on the server")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _run_async_value _run_async { get; set; } = _run_async_value._false;

        public enum _run_async_value
        {
            /// <summary>
            /// <para>RUN_ASYNCHRONOUSLY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RUN_ASYNCHRONOUSLY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>RUN_SYNCHRONOUSLY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RUN_SYNCHRONOUSLY")]
            [GPEnumValue("false")]
            _false,

        }

        public ReshapeDiagramEdgesLayout SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}